from util.config import Config
from rtsp.rtsp_client import  RTSPClient
from llm.glm import Glm
import logging
import time

logger = logging.getLogger('Moss')
logger.setLevel(logging.DEBUG)

class Moss:
    """
    Moss类，用于处理 Moss 逻辑。
    """
    def __init__(self,):
        try:
            # 加载配置信息
            self.config = Config.load_config()
            
            # 初始化语言模型
            self.llm = Glm(self.config.get("llm").get("glm"))
            
            # 获取RTSP配置信息
            rtsp_config = self.config.get("rtsp")
            
            # 初始化RTSP客户端
            self.rtsp_client = RTSPClient(rtsp_config)
        except Exception as e:
            # 日志记录初始化过程中的异常
            logger.error(e)


    def exc(self, text: str) -> str:
        """
        使用当前帧作为视觉输入，执行与视觉相关的语言指令。
    
        本函数通过调用RTSP客户端的`save_current_frame`方法获取当前帧，并将该帧与给定的文本指令一起
        传递给语言模型（LLM），以执行需要视觉理解的指令处理。这使得该函数能够在拥有视觉信息的上下文中
        进行语言理解和生成任务。
    
        参数:
        - text (str): 需要执行的语言指令，该指令通常包含对视觉信息的需求。
    
        返回:
        - str: 语言模型根据输入的文本指令和视觉信息生成的响应。
        """
        logger.info("执行指令：{}".format(text))
        # 获取RTSP客户端当前帧的视觉信息
        capture = self.rtsp_client.save_current_frame()[1]
        # 调用语言模型的create方法，将文本指令和视觉信息作为输入，生成相应的响应
        return self.llm.create(text, capture)

if __name__ == '__main__':
    moss = Moss()
    
    while True:
        time.sleep(5)
        moss.exc("这是什么？")